// src/main/java/org/nextcore/common/Results.java
package org.nextcore.common;

import lombok.Data;
import lombok.Getter;

import java.util.List;

/**
 * Author：Fromsko
 * 通用返回结果类，使用泛型支持不同类型的数据
 */
@Data
public class Results<T> {
    private int code;
    private String message;
    private T data;
    private List<T> dataList;

    /**
     * 内部枚举类，定义不同的状态码
     */
    @Getter
    public enum ResultCode {
        SUCCESS(200, "成功"),
        FAIL(500, "失败");

        private final int code;
        private final String message;

        ResultCode(int code, String message) {
            this.code = code;
            this.message = message;
        }
    }

    /**
     * 成功返回单个数据
     * @param data 单个数据
     * @param <T> 数据类型
     * @return Results 对象
     */
    public static <T> Results<T> success(T data) {
        Results<T> result = new Results<>();
        result.setCode(ResultCode.SUCCESS.getCode());
        result.setMessage(ResultCode.SUCCESS.getMessage());
        result.setData(data);
        return result;
    }

    /**
     * 成功返回多个数据
     * @param dataList 数据列表
     * @param <T> 数据类型
     * @return Results 对象
     */
    public static <T> Results<T> success(List<T> dataList) {
        Results<T> result = new Results<>();
        result.setCode(ResultCode.SUCCESS.getCode());
        result.setMessage(ResultCode.SUCCESS.getMessage());
        result.setDataList(dataList);
        return result;
    }

    /**
     * 失败返回
     * @param message 错误消息
     * @param <T> 数据类型
     * @return Results 对象
     */
    public static <T> Results<T> fail(String message) {
        Results<T> result = new Results<>();
        result.setCode(ResultCode.FAIL.getCode());
        result.setMessage(message);
        return result;
    }
}